package com.genericity.demo05;

import com.genericity.demo02.GetProducts;

import java.util.ArrayList;

/**
 * 泛型方法的使用
 */
public class Test {
    public static void main(String[] args) {
        GetProducts<Integer> ProductsGetter = new GetProducts<>();
        /**
         * 调用成员属性方法时，必须是泛型类指定的数据类型
         */
        ArrayList<Integer> intRed = new ArrayList<>();
        intRed.add(488);
        intRed.add(288);
        intRed.add(988);
        for (int i = 0; i < intRed.size(); i++) {
            ProductsGetter.setProduct(intRed.get(i));
        }
        // 调用成员方法 返回的类型必须要和泛型类时指定的数据类型一致。
        Integer product2 = ProductsGetter.getProduct();
        System.out.println("红包 "+product2+" 类型 "+product2.getClass().getSimpleName());
        System.out.println("======泛型方法=======");
        // 调用泛型方法
        ArrayList<String> strProducts = new ArrayList<>();
        strProducts.add("苹果手机");
        strProducts.add("华为手机");
        strProducts.add("小米电视");
        strProducts.add("扫地机器人");
        /**
         * 调用泛型方法
         * 泛型方法的调用，类型是通过调用方法的时候来指定的，
         * 与实例化泛型类时指定的数据类型无关。
         */
        String product = ProductsGetter.getProduct(strProducts);
        System.out.println("抽中的奖品是 "+product+"\t"+product.getClass().getSimpleName());
        System.out.println("=================");
        ArrayList<Integer> intProducts = new ArrayList<>();
        intProducts.add(100);
        intProducts.add(300);
        intProducts.add(800);
        Integer product1 = ProductsGetter.getProduct(intProducts);
        System.out.println("抽中的红包是 "+product1+"\t"+product1.getClass().getSimpleName());
        System.out.println("====== 调用静态的 ======");
        System.out.println(GetProducts.randomProduct(strProducts));
        // 调用多个泛型的静态方法
        GetProducts.go("字符串类型",100,true);
        GetProducts.go(false,false,true);
        System.out.println("=== 调用可变参数方法 ===");
        GetProducts<String> changeGetProducts = new GetProducts<>();
        // 在使用的时候 指定具体的数据类型
        changeGetProducts.print(2,3,"测试",5,7);
        /**
         * 2
         * 3
         * 测试
         * 5
         */
        System.out.println("---------");
        String[] abc = {"a","b","c","d"};
        changeGetProducts.print(abc);
        //changeGetProducts.print("a","b","c","d");
        System.out.println("===========");
        Integer[] nums = {299,400,188,344,267}; //这样传递进入会变成 是数组数据类型
        System.out.println(nums.getClass().getSimpleName());
        changeGetProducts.print(nums);
    }
}
